package com.yaodong.ydshop;

import android.app.Activity;
import android.content.Intent;
import android.database.DataSetObserver;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ListView;
import android.widget.TextView;
import com.alipay.sdk.pay.demo.PayDemoActivity;
import com.yaodong.ydshop.adapters.CartAdapter;
import com.yaodong.ydshop.model.CartItem;

import java.util.LinkedList;
import java.util.List;

public class MainActivity extends Activity implements CompoundButton.OnCheckedChangeListener, View.OnClickListener {

    private CartAdapter adapter;
    private List<CartItem> cartItems;
    private TextView totalText;

    /**
     * 计算总金额的观察着 检测Adapter
     */
    private DataSetObserver sumObserver = new DataSetObserver() {
        /**
         * 当Adapter的notifyDataSetChanged 被调用 那么回掉这个方法
         */
        @Override
        public void onChanged() {
            //TODO 计算总金额
            double sum = 0;
            for(CartItem item:cartItems){

                if(item.isChecked() == true){
                int count = item.getCount();
                float price = item.getProductPrice();
                sum+=(price*count);
                }
            }
            Log.d("Cart","SumPrice"+sum);
            totalText.setText(Double.toString(sum));
        }
        /**
         * 当Adapter的notifyDataSetInvalidate被调用 那么回掉这个方法
         */
        @Override
        public void onInvalidated() {

        }
    };
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        totalText = (TextView) findViewById(R.id.cart_total_text);
        CheckBox checkbox = (CheckBox) findViewById(R.id.cart_selectAll_checkbox);
        ListView listView = (ListView) findViewById(R.id.cart_item_listView);
        cartItems = new LinkedList<CartItem>();
        CartItem cartItem = null;
        for (int i = 0; i < 30 ; i++) {
            cartItem = new CartItem();
            String name = "商品"+i;
            cartItem.setProductName(name);
            cartItem.setProductPrice(i);
            cartItem.setCount(i);
            cartItems.add(cartItem);
        }
        adapter = new CartAdapter(this, cartItems);
        //由Activity 来监听 ListView 条目内部checkBox 变化
        adapter.setItemCheckedListener(this);
        //监听数量变化
        adapter.setOnCountChangeListener(this);

        //设置Adapter 的数据变化的观察者 只要adapter的notifyDatasetChanged  被调用就会调用观察者的回调

        adapter.registerDataSetObserver(sumObserver);
        listView.setAdapter(adapter);


    }

    @Override
    protected void onDestroy() {
        adapter.unregisterDataSetObserver(sumObserver);
        super.onDestroy();
    }

    /**
     * 点击按钮切换编辑模式
     * @param view
     */
    public void btnSwitchEditMode(View view) {
        adapter.switchEditMode();
    }

    /**
     * 关于checkBox处理的操作 CheckBox 设置好接口之后由于复用 导致CheckBox 可能代表不同的条目
     *
     * 接口实现类就无法判断选中到底是那个条目
     *
     * adapter getView 就给CheckBox 设置 tag  让选中处理事件处理器 能够获得当前选中的是哪个条目
     *
     * 任何 CheckBox 当调用 setChecked  就会自动调用接口事件 在任何 setChecked 之前 需要设置当前位置的tag
     * @param buttonView
     * @param isChecked
     */
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {


        Object tag = buttonView.getTag();
            if(tag!=null&&tag instanceof Integer)
            {
                int position = (Integer) tag;
                // Toast.makeText(this, position + "切换选择 " + isChecked, Toast.LENGTH_SHORT).show();
                CartItem cartItem = cartItems.get(position);
                //数据状态变化  不需要强制notifyDataSetchanged
                cartItem.setChecked(isChecked);
                adapter.notifyDataSetChanged();
            }

    }




    @Override
    public void onClick(View v) {
    //点击接口处理 用于处理listView 内部的按钮的点击
        int id = v.getId();
        Object tag = v.getTag();
        switch (id){
            case R.id.cart_item_inc:
            if(tag!=null&&tag instanceof  Integer)
            {
                int position = (Integer) tag;
                // Toast.makeText(this, position + "切换选择 " + isChecked, Toast.LENGTH_SHORT).show();
                CartItem cartItem = cartItems.get(position);
                //数据状态变化  不需要强制notifyDataSetchanged
               int count = cartItem.getCount();
                count++;

                //设置增加一个 数量
                cartItem.setCount(count);
                //强制刷新 Adapter 就会自动刷新数量
                adapter.notifyDataSetChanged();
            }
            break;
            case R.id.cart_item_dec:
                if(tag!=null&&tag instanceof  Integer)
                {
                    int position = (Integer) tag;
                    // Toast.makeText(this, position + "切换选择 " + isChecked, Toast.LENGTH_SHORT).show();
                    CartItem cartItem = cartItems.get(position);
                    //数据状态变化  不需要强制notifyDataSetchanged
                    int count = cartItem.getCount();
                    count--;
                    if (count >= 0) {
                        //设置减少一个 数量
                        cartItem.setCount(count);
                        //强制刷新 Adapter 就会自动刷新数量
                        adapter.notifyDataSetChanged();
                    }else{
                        //对于小于1的情况可以不处理 也可以删除条目

                    }

                }
            break;
        }
    }

    /**
     *
     * @param view
     */
    public void onSelectAllCheckBoxChanged(View view) {
        CheckBox checkBox = (CheckBox) view;
        boolean isChecked = checkBox.isChecked();
        if(isChecked){
            for(CartItem item:cartItems){
                item.setChecked(true);
                adapter.notifyDataSetChanged();
            }
        }else{
            for(CartItem item:cartItems){
                item.setChecked(false);
                adapter.notifyDataSetChanged();
            }
        }
    }
    /**
     * 调用支付宝 支付的DemoActivity 来进行支付操作
     * @param view
     */
    public void btnPay(View view) {
        Intent   intent = new Intent(this, PayDemoActivity.class);

        intent.putExtra("productName","您的订单");
        intent.putExtra("productDetail","您购买的所有商品");
        intent.putExtra("totalPrice",totalText.getText());

        //TODO　传递订单名称以及钱的总数　让payDemoActivity 能够正确的显式 以及支付
        startActivity(intent);
    }



}
